home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 4
/
CU Amiga Magazine's Super CD-ROM 04 (1996)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1996-11].iso
/
magazine
/
psion
/
new
/
pl061b.lzx
/
run_me.opl
< prev
Wrap
Text File
|
2006-02-04
|
3KB
|
127 lines
PROC test:
LOCAL codeadr%,funcadr%,params%(2)
LOCAL array%(20)
local len%
local i%
len%=15
params%(1)=ADDR(array%(1))
params%(2)=len%
codeadr%=plInit%:
print "address of code block is "; codeadr%
funcadr%=plSym%:("fillArray",codeadr%)
print "address of function fillArray is "; funcadr%
i%=codeadr%
print
print "code check"
WHILE i% < codeadr%+50
print hex$(peekb(i%));" ";
i%=i%+1
ENDWH
print
print
USR(codeadr%,funcadr%,addr(params%(1)),2,0)
print "data check"
i%=1
while i%<21
print i%;":";array%(i%)
i%=i%+1
endwh
GET
ENDP
REM--------------------------------------------------------------------
REM pLink C cross-linker OPL code output
REM Call plInit to initialise the code
REM To call C functions from OPL, use:
REM USR(codeadr,funcadr%,paramadr%,nparams,0)
REM codeadr% is the address of the code array (returned by plInit%)
REM funcadr% is the address of the function (returned by plSym%)
REM paramadr% is the address of the parameters array
REM nparams% is the number of word-sized parameters
REM Remember to read the conditions of use before running this code
REM--------------------------------------------------------------------
PROC plInit%:
LOCAL plCode&(32)
LOCAL plReloc%(2)
LOCAL i%,tmp%,tmpadr%,codeadr%
plCode&(1)=&83EC8B55
plCode&(2)=&0B7400F9
plCode&(3)=&D903D903
plCode&(4)=&FF02EB83
plCode&(5)=&FFF9E237
plCode&(6)=&5DE58BD0
plCode&(7)=&EC8B55CB
plCode&(8)=&0006EC81
plCode&(9)=&46C75756
plCode&(10)=&E90000FA
plCode&(11)=&76FF0019
plCode&(12)=&0033E8FA
plCode&(13)=&8B02C483
plCode&(14)=&E2D1FA56
plCode&(15)=&03045E8B
plCode&(16)=&830789DA
plCode&(17)=&8B01FA46
plCode&(18)=&46390646
plCode&(19)=&E9037DFA
plCode&(20)=&08B9FFDC
plCode&(21)=&0095A100
plCode&(22)=&0603E0D3
plCode&(23)=&00E90093
plCode&(24)=&8B5E5F00
plCode&(25)=&55C35DE5
plCode&(26)=&EC81EC8B
plCode&(27)=&57560002
plCode&(28)=&0504468B
plCode&(29)=&00E90001
plCode&(30)=&8B5E5F00
plCode&(31)=&55C35DE5
plCode&(32)=&9090EC8B
plReloc%(1)=$0052
plReloc%(2)=$0058
codeadr%=ALLOC(153)
IF codeadr% = 0
raise -10
ENDIF
i% = 1
WHILE i% <= 32
POKEL codeadr% + ((i% - 1)*4), plCode&(i%)
i% = i% + 1
ENDWH
i%=1
WHILE i%<3
tmpadr%=codeadr% + plReloc%(i%)
tmp%=PEEKW(tmpadr%)
POKEW tmpadr%,tmp%+codeadr%
i%=i%+1
ENDWH
RETURN codeadr%
ENDP
PROC plSym%:(symbol$,codeadr%)
if symbol$="public"
return (codeadr% + 147)
endif
if symbol$="fillArray"
return (codeadr% + 25)
endif
if symbol$="plusTwo"
return (codeadr% + 123)
endif
raise -38
ENDP